%APPDATA% и реестр.Диагностика, редакторы, медиа, сеть — описаны в одной карте, ставятся прямо в сборку.
Установка, обновление, атлас, версии — всё в верхнем меню Total Commander.
Ничего в систему: программы, настройки и профили живут внутри папки сборки.
Только .ps1, карта apps_map.ini и bin\fzf.exe — весь движок сборки в одной папке.
Только .cmd — то, что запускает человек или сам TC. Точки входа отделены от внутренностей.
Меню — в Menus\, а не в территории TC. Программы — в Apps\.
Apps\ целиком — менеджер остаётся рабочим и весит 171 МБ вместо 1,8 ГБ.; одна секция = одна кнопка [system.hwinfo] dir=HWiNFO exe=HWiNFO64.exe menu=Датчики и железо source=webpage
Проходит карту, проверяет каждый файл на диске и переписывает панели, меню и команды — но только между своими маркерами. Снаружи маркеров — ручная территория.
Последний /releases/latest сам пропускает Preview — Windows Terminal берётся стабильный, а не бета.
Разбор rss?path=/, свежий выпуск сверху; редакцию Shizuku/Aoi отсекает цифра в конце имени.
Ищем ссылку по маске прямо в HTML; linkdeny убирает preview-сборки рядом со стабильной.
Редирект на свежую версию, имя файла — из того, куда привёл: так раздаёт себя VS Code.
winget download тянет zip или portable; WinGet рисует свой прогресс, вывод не глушим.
Три запроса за одноразовой ссылкой; нужный вариант выбирают pick и kind.
*win64*, *x64*): GitHub кладёт arm64 рядом, и *bin.zip цепляет его первым.Одна разведка каталога выбирает квоту целиком. Дальше API отвечает rate limit exceeded — и на большой установке это происходит быстро.
Загрузчик берёт /releases/latest — редирект на тег, — и /expanded_assets/<tag> со списком файлов. Квот там нет. Проверено на живом обновлении Notepad++.
403 и на страницу, и на файл, если запрос пришёл из PowerShell. Подделка заголовков не помогает — фильтр опознаёт .NET по TLS-рукопожатию.curl.exe из Windows тот же запрос проводит без вопросов — при 403 загрузчик молча повторяет через него.Wget/1.21.4.text/html вместо архива — общая проверка говорит об этом сразу, а не падает позже на распаковке.Маска забирает из старой версии базы и списки: FSSettings.db, lists\*-user.txt — можно и в подпапку.
У Zapret Update-Zapret.ps1 -StopOnly снимает драйвер WinDivert ровно перед заменой — после скачивания, чтобы обход блокировок ещё работал.
Папка не подменяется, а вычищается и наполняется заново — проходит, даже когда её держит открытая панель TC.
.bak — но не молча: счётчик в подписи пункта не даёт сборке тихо разрастись вдвое за полгода.Каждая программа: где живёт, версия, источник, в каких сборках стоит. У конфигов — развёрнутое содержимое прямо на странице: не отметка, а те строки, что мы кладём.
«Программа → версия → источник → где → в сборке». Колонка версий — из карты версий. Генерится в каждой сборке под её состав.
Panel.cmd <действие>, который прыгает прямо в нужный раздел пульта: fzf-выбор там, где выбор, рамка там, где действие..bat, у многих её в exe нет вовсе. Так обновление вечно мазало.Ware\State\app-versions.json — чистый каталог того, что можно поставить.Apps.md. Один источник на всё.Массовое обновление не смотрело на версию — тянуло и переставляло даже то, что уже стоит свежим. NVCleanstall 1.19 → снова 1.19, и рядом лишний .bak.
Доступная версия сравнивается с записью в карте: совпало — пропуск, вышло новее — качаем. Версию по сети не собрать (nightly) — качаем принудительно.
.bak убирается сразу после успешной установки; при сбое — остаётся для отката. Мусор не копится.Apps\ нет. «Актуально по карте» ≠ «установлено».Apps\ реально есть и не пуста. Пусто — ставим, не глядя на карту.apps_map. Ему не нужны ни установленные программы, ни сам Total Commander. Только ссылки.TOTALCMD64.EXE рядом. Убрали жёсткое требование: корнем берётся родитель Scripts\.Восемь резидентов — визитка и монитор под рукой, остальное докачивается.
Админу — диагностика, кодеру — редакторы, креатору — медиа. Один состав не подходит всем.
Полсотни программ. Любой Release дорастает до него — было бы желание.
Запускается через mshta: выглядит как страница с чекбоксами, но имеет доступ к файловой системе и запуску. Один файл, никаких зависимостей.
48 программ по разделам, у каждой версия из карты и метка профиля. Пресеты подтягиваются из Scripts\sets\*.txt.
Отметил вручную или пресетом.
Имена карты + метка профиля.
Пишет реестр в Ware\State.
Ставит выбранное.
FileSystemObject и WScript.Shell пишет install.list и зовёт Run\Install-Set.cmd — тот запускает ядро.|noprofile. Один формат несёт и выбор, и решение про профиль.Кнопка набора ставит галочки на свои программы, снимает с чужих. Список — просто имена карты, по строке; правится в блокноте, без пересборки.
Profiles\<prog>) в окне вторая галочка — «профиль», по умолчанию отмечена. Ставим сразу с нашими настройками.Apps\ — профиль в Profiles\ цел и вернётся.имя|noprofile, и Get-App ставит программу чистой, не накладывая Profiles\.Apps\<prog> реально есть и не пуста. На чистом Release — ставим.Profiles\ (если галочка), убрать .bak, снять версию в карту.== HWiNFO64 (webpage) скачано: hwi_850.zip (20 824 195 байт) заготовка наложена: Profiles\HWiNFO прежняя версия убрана: HWiNFO.bak == KeePassXC (github) лимит GitHub API исчерпан, беру со страницы релиза скачано: KeePassXC-2.7.12-Win64.zip
.bak убирается, кнопки пересобираются. «Всё круто!!!» — из живого прогона.Ware\State) — и поднимает лимит с 60 до 5000 запросов в час.MD5-сверка всех скриптов и конфигов между сборками; парсер PowerShell ловит ошибку до запуска; сравнение версий на живых числах.
Установщик на пустом Release реально ставит, накладывает профиль, убирает .bak, пересобирает кнопки. Дыру с картой поймали именно так.
$pid нашли на прогоне и назвали своими словами.